#coding:utf-8
import sys
sys.path.append("..")

from MysqlCon import MysqlCon
import time


class OfficeAJK(object):
    """
    写字楼-安居客 数据的导入

    1、读取文件数据
    2、写入库表
    """


    #多行插入
    def insert_many(self, connect, cursor, insert_data):
        # 获取数据，写入数据库
        insert_sql = """
        insert into ori_offic_info_ajk_20210105(
            platform, url, city_name, county_name, office_name, lnglat, address, rou_location, office_type, office_level, floor_num, building_area, land_area, floor_area, floor_height, volume_rate, property_fee, park_num, day_rent, park_rent, elevator_num, gd_city, gd_county, gd_lnglat, gd_office_name, is_accurate
            ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        """
        connect.ping(reconnect = True)

        # 批量插入
        try:
            res = cursor.executemany(insert_sql, insert_data)
            print("res = ", res)
            # 提交，不进行提交无法保存到数据库
            connect.commit()
        except Exception as e:
            print(e)
            connect.rollback()
        #finally:
        #connect.close()

        return True


    #生成行数据列表
    def makeDataRow(self, line):
        #分解列值
        cols = line.split("\t")
        colNum = len(cols)
        #print("列数：", colNum)
        #平台	链接	城市	行政区	名称	经纬度	地址	环线位置（环线、郊线）	类型	级别	总层数	建筑面积	占地面积	标准层面积	层高	容积率	物业费	停车位	日租金	车位月租金	客梯	高德城市	高德区域	高德经纬度	高德名称	是否精准名称
        rowData = []
        i = 0
        while i < colNum :
            rowData.append(cols[i])
            i += 1
        return rowData



if __name__ == "__main__":

    # 获取数据库连接
    mysql_con = MysqlCon()
    connect_odsdb, cursor_odsdb = mysql_con.con_odsdb()

    #记录执行开始时间
    str_time = int(time.time())

    #实例化类
    office = OfficeAJK()

    # 读取原文件
    with open('D:\\usr\\EJU\\数据部门\\大数据系统\\商业客户数据部\\数据迁移\\待入库文件20210111\\写字楼-安居客.txt','r',encoding='utf-8') as f:
        lines = f.readlines()
        #print(text)
    #跳过第一行表头
    header = lines.pop(0)
    print(header)

    maxRow = len(lines)
    print("总记录数", maxRow)

    row = 0
    insertDataList = []
    for line in lines:
        #分解列值
        #cols = line.split("\t")
        #print("列数：", len(cols))
        #break

        rowData = office.makeDataRow(line)
        insertDataList.append(rowData)
        row = row + 1
        if row > 0 and (row % 1000 == 0 or row == maxRow):
            print(row)
            # 批量写入1000条数据
            office.insert_many(connect_odsdb, cursor_odsdb, insertDataList)
            insertDataList.clear()

    connect_odsdb.close()

    end_time = int(time.time())
    print("程序执行时间（秒）：", end_time - str_time)
